import { auth } from './auth'

/**
 * 认证调试工具
 */
export const authDebug = {
    /**
     * 完整的认证状态检查
     */
    checkAuthStatus() {
        console.log('🔍 认证状态调试检查')
        console.log('='.repeat(50))
        
        // 1. 检查localStorage中的原始数据
        const rawToken = localStorage.getItem('token')
        const rawUser = localStorage.getItem('user')
        console.log('📝 localStorage原始数据:')
        console.log('  - token:', rawToken ? '存在' : '不存在', rawToken ? `(长度: ${rawToken.length})` : '')
        console.log('  - user:', rawUser ? '存在' : '不存在', rawUser)
        
        // 2. 通过auth工具获取数据
        const token = auth.getToken()
        const user = auth.getUser()
        console.log('🔧 通过auth工具获取:')
        console.log('  - getToken():', token ? '存在' : '不存在')
        console.log('  - getUser():', user ? '存在' : '不存在', user)
        
        // 3. Token详细分析
        if (token) {
            console.log('🔐 Token详细分析:')
            try {
                const parts = token.split('.')
                console.log('  - Token格式:', parts.length === 3 ? '正确(JWT)' : '错误')
                
                if (parts.length === 3) {
                    const payload = auth.getTokenPayload(token)
                    console.log('  - Token payload:', payload)
                    
                    const isExpired = auth.isTokenExpired(token)
                    console.log('  - Token是否过期:', isExpired)
                    
                    if (payload && payload.exp) {
                        const expDate = new Date(payload.exp * 1000)
                        const now = new Date()
                        console.log('  - Token过期时间:', expDate.toLocaleString())
                        console.log('  - 当前时间:', now.toLocaleString())
                        console.log('  - 剩余时间:', Math.floor((expDate - now) / 1000 / 60), '分钟')
                    }
                }
            } catch (error) {
                console.log('  - Token解析错误:', error.message)
            }
        }
        
        // 4. 最终认证结果
        const isAuthenticated = auth.isAuthenticated()
        console.log('✅ 最终认证结果:', isAuthenticated)
        
        console.log('='.repeat(50))
        
        return {
            hasToken: !!token,
            hasUser: !!user,
            isTokenValid: token && !auth.isTokenExpired(token),
            isAuthenticated,
            tokenLength: token ? token.length : 0,
            userInfo: user
        }
    },
    
    /**
     * 清除所有认证信息并确认
     */
    clearAllAuth() {
        console.log('🧹 清除所有认证信息')
        
        // 清除localStorage中的所有相关项
        const keysToRemove = ['token', 'user']
        keysToRemove.forEach(key => {
            const before = localStorage.getItem(key)
            localStorage.removeItem(key)
            const after = localStorage.getItem(key)
            console.log(`  - ${key}: ${before ? '有' : '无'} → ${after ? '有' : '无'}`)
        })
        
        // 确认清除结果
        const finalCheck = this.checkAuthStatus()
        console.log('🔍 清除后状态:', finalCheck.isAuthenticated ? '仍有认证信息' : '已完全清除')
        
        return finalCheck
    },
    
    /**
     * 模拟认证状态
     */
    simulateAuth(tokenValid = true, userExists = true) {
        console.log('🎭 模拟认证状态')
        this.clearAllAuth()
        
        if (userExists) {
            const mockUser = {
                userId: 1,
                username: 'testuser',
                email: 'test@example.com'
            }
            auth.setUser(mockUser)
            console.log('  - 设置模拟用户:', mockUser)
        }
        
        if (tokenValid) {
            // 创建一个有效的模拟token（过期时间为1小时后）
            const expTime = Math.floor(Date.now() / 1000) + 3600
            const mockPayload = {
                sub: 'testuser',
                exp: expTime,
                iat: Math.floor(Date.now() / 1000)
            }
            const mockToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.' + 
                             btoa(JSON.stringify(mockPayload)) + 
                             '.mock_signature'
            auth.setToken(mockToken)
            console.log('  - 设置模拟token (1小时有效期)')
        }
        
        return this.checkAuthStatus()
    },
    
    /**
     * 测试路由守卫
     */
    testRouteGuard() {
        console.log('🛡️ 测试路由守卫逻辑')
        
        const authStatus = this.checkAuthStatus()
        console.log('当前认证状态:', authStatus.isAuthenticated)
        
        // 模拟路由守卫的判断逻辑
        const mockRoute = { meta: { requiresAuth: true } }
        const needsAuth = mockRoute.meta.requiresAuth
        console.log('路由需要认证:', needsAuth)
        
        const shouldRedirect = needsAuth && !authStatus.isAuthenticated
        console.log('应该重定向到登录页:', shouldRedirect)
        
        return {
            needsAuth,
            isAuthenticated: authStatus.isAuthenticated,
            shouldRedirect
        }
    }
}

// 在开发环境下添加到全局对象，方便控制台调试
if (import.meta.env.MODE === 'development') {
    window.authDebug = authDebug
    console.log('🔧 认证调试工具已添加到 window.authDebug')
    console.log('使用方法:')
    console.log('  - window.authDebug.checkAuthStatus() // 检查认证状态')
    console.log('  - window.authDebug.clearAllAuth() // 清除所有认证信息')
    console.log('  - window.authDebug.testRouteGuard() // 测试路由守卫')
}

export default authDebug 